# -*- coding: utf-8 -*-
from django.http import HttpResponse

from app import models

from django.db import connection

"""
一对多(外键 ForeignKey)
方式一: 传对象的形式，返回值的数据类型是对象，书籍对象。
步骤：
    a. 获取出版社对象
    b. 给书籍的出版社属性 pulish 传出版社对象
"""


def add_book(request):
    #  获取出版社对象
    pub_obj = models.Publish.objects.filter(pk=1).first()
    #  给书籍的出版社属性publish传出版社对象
    book = models.BookData.objects.create(title="Python教程", price=1, pub_date="2010-10-10", publish=pub_obj)
    print(book, type(book))
    return HttpResponse(book)


"""
方式二: 传对象 id 的形式(由于传过来的数据一般是 id,所以传对象 id 是常用的)。
一对多中，设置外键属性的类(多的表)中，MySQL 中显示的字段名是:外键属性名_id。
返回值的数据类型是对象，书籍对象。
步骤：
    a. 获取出版社对象的 id
    b. 给书籍的关联出版社字段 pulish_id 传出版社对象的 id
"""


def add_book_One(request):
    #  获取出版社对象
    pub_obj = models.Publish.objects.filter(pk=1).first()
    #  给书籍的出版社属性publish传出版社对象
    book = models.BookData.objects.create(title="Python教程", price=200, pub_date="2010-10-10", publish=pub_obj.id)
    print(book, type(book))
    return HttpResponse(book)


"""
多对多(ManyToManyField)
    方式一: 传对象形式，无返回值。
    步骤：
        a. 获取作者对象
        b. 获取书籍对象
        c. 给书籍对象的 authors 属性用 add 方法传作者对象
"""


def manyToMany_add_book(request):
    #  获取作者对象
    chong = models.Author.objects.filter(name="令狐冲").first()
    ying = models.Author.objects.filter(name="任盈盈").first()
    #  获取书籍对象
    book = models.BookData.objects.filter(title="Python教程").first()
    #  给书籍对象的 authors 属性用 add 方法传作者对象
    book.authors.add(chong, ying)
    return HttpResponse(book)


"""
方式二: 传对象id形式，无返回值。
步骤：
    a. 获取作者对象的 id
    b. 获取书籍对象
    c. 给书籍对象的 authors 属性用 add 方法传作者对象的 id
"""


def manyToMany_add_book_one(request):
    #  获取作者对象
    chong = models.Author.objects.filter(name="令狐冲").first()
    #  获取作者对象的id
    pk = chong.pk
    #  获取书籍对象
    book = models.Book.objects.filter(title="冲灵剑法").first()
    #  给书籍对象的 authors 属性用 add 方法传作者对象的id
    book.authors.add(pk)

#原生sql
def findBookDetail(requests):
    cursor = connection.cursor()
    # 插入操作
    cursor.execute("insert into pc_book_data(title,price,pub_date,publish_id) values('传说中的申小五',1,'2021-11-11',1)")
    cursor.execute("insert into pc_book_data(title,price,pub_date,publish_id) values('传说中的申小五',1,'2021-11-11',1)")
    # 更新操作
    cursor.execute("update pc_book_data set title='传说中的申小五1' where title='传说中的申小五'")
    # 删除操作
    cursor.execute("delete from pc_book_data where title='传说中的申小五1'")
    # 查询操作
    cursor.execute("select * from pc_book_data")
    #raw = cursor.fetchone()  # 返回结果行游标直读向前，读取一条
    result=cursor.fetchall()  # 读取所有
    return HttpResponse(result)